package com.hehao.java_basic.stream;


import com.hehao.common.entiy.Person;

import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author Damon
 * @date 2022/2/23
 * sorted，中间操作。有两种排序：
 * sorted()：自然排序，流中元素需实现Comparable接口
 * sorted(Comparator com)：Comparator排序器自定义排序
 * <p>
 * 将员工按工资由高到低（工资一样则按年龄由大到小）排序
 */
public class SortDemo {
    public static void main(String[] args) {
        List<Person> list = Person.getList();

        //自然排序
        System.out.println(list.stream().sorted(Comparator.comparing(Person::getSalary)).map(Person::getName).collect(Collectors.toList()));
        //倒序
        System.out.println(list.stream().sorted(Comparator.comparing(Person::getSalary).reversed()).map(Person::getName).collect(Collectors.toList()));
        System.out.println(list.stream().sorted(Comparator.comparing(Person::getSalary).reversed()).collect(Collectors.toList()));
        // 先按工资再按年龄升序排序
        System.out.println(list.stream().sorted(Comparator.comparing(Person::getSalary).thenComparing(Person::getAge)).collect(Collectors.toList()));
        // 先按工资再按年龄自定义排序（降序）
        System.out.println(list.stream().sorted((p1, p2) -> {
            if (p1.getSalary().equals(p2.getSalary())) {
                return p2.getAge() - p1.getAge();
            } else {
                return p2.getSalary() - p1.getSalary();
            }
        }).map(Person::getName).collect(Collectors.toList()));

    }
}
